X-Git-Url: http://git.cyclocoop.org//%22http:/%22.attribut_html%28%24lesurls%5B%24numero%5D%29.%22/%22?a=blobdiff_plain;f=includes%2FLinker.php;h=f4131ed40fcb23ecd524a1f2fe431273d250e8d7;hb=f8cc99ea9885103ed4ee23b83efc003d24c98450;hp=a5c85a9c4b5faacf0e984cafc9d20c4ea21cdaee;hpb=88db1539087a62ba94d7d8105355543fff0e2d07;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Linker.php b/includes/Linker.php index a5c85a9c4b..f4131ed40f 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -19,6 +19,7 @@ * * @file */ +use MediaWiki\Linker\LinkTarget; /** * Some internal bits split of from Skin.php. These functions are used @@ -39,6 +40,7 @@ class Linker { /** * Get the appropriate HTML attributes to add to the "a" element of an interwiki link. * + * @since 1.16.3 * @deprecated since 1.25 * * @param string $title The title text for the link, URL-encoded (???) but @@ -65,6 +67,7 @@ class Linker { /** * Get the appropriate HTML attributes to add to the "a" element of an internal link. * + * @since 1.16.3 * @deprecated since 1.25 * * @param string $title The title text for the link, URL-encoded (???) but @@ -85,6 +88,7 @@ class Linker { * Get the appropriate HTML attributes to add to the "a" element of an internal * link, given the Title object for the page we want to link to. * + * @since 1.16.3 * @deprecated since 1.25 * * @param Title $nt @@ -106,6 +110,7 @@ class Linker { /** * Common code for getLinkAttributesX functions * + * @since 1.16.3 * @deprecated since 1.25 * * @param string $title @@ -131,6 +136,7 @@ class Linker { /** * Return the CSS colour of a known link * + * @since 1.16.3 * @param Title $t * @param int $threshold User defined threshold * @return string CSS class @@ -257,12 +263,13 @@ class Linker { /** * Identical to link(), except $options defaults to 'known'. + * @since 1.16.3 * @see Linker::link * @return string */ public static function linkKnown( $target, $html = null, $customAttribs = [], - $query = [], $options = [ 'known', 'noclasses' ] + $query = [], $options = [ 'known' ] ) { return self::link( $target, $html, $customAttribs, $query, $options ); } @@ -270,24 +277,23 @@ class Linker { /** * Returns the Url used to link to a Title * - * @param Title $target + * @param LinkTarget $target * @param array $query Query parameters * @param array $options * @return string */ - private static function linkUrl( $target, $query, $options ) { + private static function linkUrl( LinkTarget $target, $query, $options ) { # We don't want to include fragments for broken links, because they # generally make no sense. if ( in_array( 'broken', $options, true ) && $target->hasFragment() ) { - $target = clone $target; - $target->setFragment( '' ); + $target = $target->createFragmentTarget( '' ); } # If it's a broken link, add the appropriate query pieces, unless # there's already an action specified, or unless 'edit' makes no sense # (i.e., for a nonexistent special page). if ( in_array( 'broken', $options, true ) && empty( $query['action'] ) - && !$target->isSpecialPage() ) { + && $target->getNamespace() !== NS_SPECIAL ) { $query['action'] = 'edit'; $query['redlink'] = '1'; } @@ -300,7 +306,8 @@ class Linker { $proto = PROTO_RELATIVE; } - $ret = $target->getLinkURL( $query, false, $proto ); + $title = Title::newFromLinkTarget( $target ); + $ret = $title->getLinkURL( $query, false, $proto ); return $ret; } @@ -397,6 +404,7 @@ class Linker { * same as the other make*LinkObj static functions, despite $query not * being used. * + * @since 1.16.3 * @param Title $nt * @param string $html [optional] * @param string $query [optional] @@ -445,19 +453,20 @@ class Linker { } /** - * @param Title $title - * @return Title + * @since 1.16.3 + * @param LinkTarget $target + * @return LinkTarget|Title You will get back the same type you passed in, or a Title object */ - static function normaliseSpecialPage( Title $title ) { - if ( $title->isSpecialPage() ) { - list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() ); + public static function normaliseSpecialPage( LinkTarget $target ) { + if ( $target->getNamespace() == NS_SPECIAL ) { + list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $target->getDBkey() ); if ( !$name ) { - return $title; + return $target; } - $ret = SpecialPage::getTitleFor( $name, $subpage, $title->getFragment() ); + $ret = SpecialPage::getTitleFor( $name, $subpage, $target->getFragment() ); return $ret; } else { - return $title; + return $target; } } @@ -483,6 +492,7 @@ class Linker { * Return the code for images which were added via external links, * via Parser::maybeMakeExternalImage(). * + * @since 1.16.3 * @param string $url * @param string $alt * @@ -900,6 +910,7 @@ class Linker { /** * Make a "broken" link to an image * + * @since 1.16.3 * @param Title $title * @param string $label Link label (plain text) * @param string $query Query string @@ -929,7 +940,15 @@ class Linker { $redir = RepoGroup::singleton()->getLocalRepo()->checkRedirect( $title ); if ( $redir ) { - return self::linkKnown( $title, $encLabel, [], wfCgiToArray( $query ) ); + // We already know it's a redirect, so mark it + // accordingly + return self::link( + $title, + $encLabel, + [ 'class' => 'mw-redirect' ], + wfCgiToArray( $query ), + [ 'known', 'noclasses' ] + ); } $href = self::getUploadUrl( $title, $query ); @@ -939,12 +958,13 @@ class Linker { $encLabel . ''; } - return self::linkKnown( $title, $encLabel, [], wfCgiToArray( $query ) ); + return self::link( $title, $encLabel, [], wfCgiToArray( $query ), [ 'known', 'noclasses' ] ); } /** * Get the URL to upload a certain file * + * @since 1.16.3 * @param Title $destFile Title object of the file to upload * @param string $query Urlencoded query string to prepend * @return string Urlencoded URL @@ -969,6 +989,7 @@ class Linker { /** * Create a direct link to a given uploaded file. * + * @since 1.16.3 * @param Title $title * @param string $html Pre-sanitized HTML * @param string $time MW timestamp of file creation time @@ -983,6 +1004,7 @@ class Linker { * Create a direct link to a given uploaded file. * This will make a broken link if $file is false. * + * @since 1.16.3 * @param Title $title * @param File|bool $file File object or false * @param string $html Pre-sanitized HTML @@ -1026,6 +1048,7 @@ class Linker { * a message key from the link text. * Usage example: Linker::specialLink( 'Recentchanges' ) * + * @since 1.16.3 * @param string $name * @param string $key * @return string @@ -1040,6 +1063,7 @@ class Linker { /** * Make an external link + * @since 1.16.3. $title added in 1.21 * @param string $url URL to link to * @param string $text Text of link * @param bool $escape Do we escape the link text? @@ -1068,7 +1092,16 @@ class Linker { if ( !$title ) { $title = $wgTitle; } - $attribs['rel'] = Parser::getExternalLinkRel( $url, $title ); + $newRel = Parser::getExternalLinkRel( $url, $title ); + if ( !isset( $attribs['rel'] ) || $attribs['rel'] === '' ) { + $attribs['rel'] = $newRel; + } elseif ( $newRel !== '' ) { + // Merge the rel attributes. + $newRels = explode( ' ', $newRel ); + $oldRels = explode( ' ', $attribs['rel'] ); + $combined = array_unique( array_merge( $newRels, $oldRels ) ); + $attribs['rel'] = implode( ' ', $combined ); + } $link = ''; $success = Hooks::run( 'LinkerMakeExternalLink', [ &$url, &$text, &$link, &$attribs, $linktype ] ); @@ -1087,7 +1120,7 @@ class Linker { * @param string $userName User name in database. * @param string $altUserName Text to display instead of the user name (optional) * @return string HTML fragment - * @since 1.19 Method exists for a long time. $altUserName was added in 1.19. + * @since 1.16.3. $altUserName was added in 1.19. */ public static function userLink( $userId, $userName, $altUserName = false ) { $classes = 'mw-userlink'; @@ -1111,6 +1144,7 @@ class Linker { /** * Generate standard user tool links (talk, contributions, block link, etc.) * + * @since 1.16.3 * @param int $userId User identifier * @param string $userText User name or IP address * @param bool $redContribsWhenNoEdits Should the contributions link be @@ -1170,6 +1204,7 @@ class Linker { /** * Alias for userToolLinks( $userId, $userText, true ); + * @since 1.16.3 * @param int $userId User identifier * @param string $userText User name or IP address * @param int $edits User edit count (optional, for performance) @@ -1180,6 +1215,7 @@ class Linker { } /** + * @since 1.16.3 * @param int $userId User id in database. * @param string $userText User name in database. * @return string HTML fragment with user talk link @@ -1191,6 +1227,7 @@ class Linker { } /** + * @since 1.16.3 * @param int $userId Userid * @param string $userText User name in database. * @return string HTML fragment with block link @@ -1214,6 +1251,7 @@ class Linker { /** * Generate a user link if the current user is allowed to view it + * @since 1.16.3 * @param Revision $rev * @param bool $isPublic Show only if all users can see it * @return string HTML fragment @@ -1235,6 +1273,7 @@ class Linker { /** * Generate a user tool link cluster if the current user is allowed to view it + * @since 1.16.3 * @param Revision $rev * @param bool $isPublic Show only if all users can see it * @return string HTML @@ -1263,6 +1302,7 @@ class Linker { * auto-generated comments (from section editing) and formats [[wikilinks]]. * * @author Erik Moeller + * @since 1.16.3. $wikiId added in 1.26 * * Note: there's not always a title to pass to this function. * Since you can't set a default parameter for a reference, I've turned it @@ -1388,7 +1428,9 @@ class Linker { * Formats wiki links and media links in text; all other wiki formatting * is ignored * + * @since 1.16.3. $wikiId added in 1.26 * @todo FIXME: Doesn't handle sub-links as in image thumb texts like the main parser + * * @param string $comment Text to format links in. WARNING! Since the output of this * function is html, $comment must be sanitized for use as html. You probably want * to pass $comment through Sanitizer::escapeHtmlAllowEntities() before calling @@ -1611,6 +1653,7 @@ class Linker { * Wrap a comment in standard punctuation and formatting if * it's non-empty, otherwise return empty string. * + * @since 1.16.3. $wikiId added in 1.26 * @param string $comment * @param Title|null $title Title object (to generate link to section in autocomment) or null * @param bool $local Whether section links should refer to local page @@ -1638,6 +1681,7 @@ class Linker { * Wrap and format the given revision's comment block, if the current * user is allowed to view it. * + * @since 1.16.3 * @param Revision $rev * @param bool $local Whether section links should refer to local page * @param bool $isPublic Show only if all users can see it @@ -1662,6 +1706,7 @@ class Linker { } /** + * @since 1.16.3 * @param int $size * @return string */ @@ -1678,6 +1723,7 @@ class Linker { /** * Add another level to the Table of Contents * + * @since 1.16.3 * @return string */ public static function tocIndent() { @@ -1687,6 +1733,7 @@ class Linker { /** * Finish one or more sublevels on the Table of Contents * + * @since 1.16.3 * @param int $level * @return string */ @@ -1697,6 +1744,7 @@ class Linker { /** * parameter level defines if we are on an indentation level * + * @since 1.16.3 * @param string $anchor * @param string $tocline * @param string $tocnumber @@ -1719,6 +1767,7 @@ class Linker { * End a Table Of Contents line. * tocUnindent() will be used instead if we're ending a line below * the new level. + * @since 1.16.3 * @return string */ public static function tocLineEnd() { @@ -1728,6 +1777,7 @@ class Linker { /** * Wraps the TOC in a table and provides the hide/collapse javascript. * + * @since 1.16.3 * @param string $toc Html of the Table Of Contents * @param string|Language|bool $lang Language for the toc title, defaults to user language * @return string Full html of the TOC @@ -1745,6 +1795,7 @@ class Linker { /** * Generate a table of contents from a section tree. * + * @since 1.16.3. $lang added in 1.17 * @param array $tree Return value of ParserOutput::getSections() * @param string|Language|bool $lang Language for the toc title, defaults to user language * @return string HTML fragment @@ -1774,6 +1825,7 @@ class Linker { /** * Create a headline for content * + * @since 1.16.3 * @param int $level The level of the headline (1-6) * @param string $attribs Any attributes for the headline, starting with * a space and ending with '>' @@ -1837,7 +1889,11 @@ class Linker { * work if $wgShowRollbackEditCount is disabled, so this can only function * as an additional check. * - * If the option noBrackets is set the rollback link wont be enclosed in [] + * If the option noBrackets is set the rollback link wont be enclosed in "[]". + * + * See the "mediawiki.page.rollback" module for the client-side handling of this link. + * + * @since 1.16.3. $context added in 1.20. $options added in 1.21 * * @param Revision $rev * @param IContextSource $context Context to use or null for the main context. @@ -1865,6 +1921,8 @@ class Linker { $inner = $context->msg( 'brackets' )->rawParams( $inner )->escaped(); } + $context->getOutput()->addModules( 'mediawiki.page.rollback' ); + return '' . $inner . ''; } @@ -1937,6 +1995,7 @@ class Linker { /** * Build a raw rollback link, useful for collections of "tool" links * + * @since 1.16.3. $context added in 1.20. $editCount added in 1.21 * @param Revision $rev * @param IContextSource|null $context Context to use or null for the main context. * @param int $editCount Number of edits that would be reverted @@ -1958,11 +2017,13 @@ class Linker { $query = [ 'action' => 'rollback', 'from' => $rev->getUserText(), - 'token' => $context->getUser()->getEditToken( [ - $title->getPrefixedText(), - $rev->getUserText() - ] ), ]; + $attrs = [ + 'data-mw' => 'interface', + 'title' => $context->msg( 'tooltip-rollback' )->text(), + ]; + $options = [ 'known', 'noclasses' ]; + if ( $context->getRequest()->getBool( 'bot' ) ) { $query['bot'] = '1'; $query['hidediff'] = '1'; // bug 15999 @@ -1987,27 +2048,16 @@ class Linker { } if ( $editCount > $wgShowRollbackEditCount ) { - $editCount_output = $context->msg( 'rollbacklinkcount-morethan' ) + $html = $context->msg( 'rollbacklinkcount-morethan' ) ->numParams( $wgShowRollbackEditCount )->parse(); } else { - $editCount_output = $context->msg( 'rollbacklinkcount' )->numParams( $editCount )->parse(); + $html = $context->msg( 'rollbacklinkcount' )->numParams( $editCount )->parse(); } - return self::link( - $title, - $editCount_output, - [ 'title' => $context->msg( 'tooltip-rollback' )->text() ], - $query, - [ 'known', 'noclasses' ] - ); + return self::link( $title, $html, $attrs, $query, $options ); } else { - return self::link( - $title, - $context->msg( 'rollbacklink' )->escaped(), - [ 'title' => $context->msg( 'tooltip-rollback' )->text() ], - $query, - [ 'known', 'noclasses' ] - ); + $html = $context->msg( 'rollbacklink' )->escaped(); + return self::link( $title, $html, $attrs, $query, $options ); } } @@ -2020,6 +2070,7 @@ class Linker { * directly paste it in as the link (escaping needs to be done manually). * Finally, if $more is a Message, call toString(). * + * @since 1.16.3. $more added in 1.21 * @param Title[] $templates Array of templates * @param bool $preview Whether this is for a preview * @param bool $section Whether this is for a section edit @@ -2115,6 +2166,7 @@ class Linker { /** * Returns HTML for the "hidden categories on this page" list. * + * @since 1.16.3 * @param array $hiddencats Array of hidden categories from Article::getHiddenCategories * or similar * @return string HTML output @@ -2143,6 +2195,7 @@ class Linker { * Format a size in bytes for output, using an appropriate * unit (B, KB, MB or GB) according to the magnitude in question * + * @since 1.16.3 * @param int $size Size to format * @return string */ @@ -2157,6 +2210,7 @@ class Linker { * isn't always, because sometimes the accesskey needs to go on a different * element than the id, for reverse-compatibility, etc.) * + * @since 1.16.3 $msgParams added in 1.27 * @param string $name Id of the element, minus prefixes. * @param string|null $options Null or the string 'withaccess' to add an access- * key hint @@ -2203,6 +2257,7 @@ class Linker { * the id but isn't always, because sometimes the accesskey needs to go on * a different element than the id, for reverse-compatibility, etc.) * + * @since 1.16.3 * @param string $name Id of the element, minus prefixes. * @return string Contents of the accesskey attribute (which you must HTML- * escape), or false for no accesskey attribute @@ -2300,6 +2355,7 @@ class Linker { /** * Creates a dead (show/hide) link for deleting revisions/log entries * + * @since 1.16.3 * @param bool $delete Set to true to use (show/hide) rather than (show) * * @return string HTML text wrapped in a span to allow for customization @@ -2317,6 +2373,7 @@ class Linker { /** * Returns the attributes for the tooltip and access key. * + * @since 1.16.3. $msgParams introduced in 1.27 * @param string $name * @param array $msgParams Params for constructing the message * @@ -2341,6 +2398,7 @@ class Linker { /** * Returns raw bits of HTML, use titleAttrib() + * @since 1.16.3 * @param string $name * @param array|null $options * @return null|string